Database systems distribute portions of a database across several nodes in a cluster in order to improve performance and provide scalability. Clusters are configured in one of two ways, as coherent memory clusters or compute clusters.
Nodes on a coherent memory cluster share physical memory. Sharing physical memory allows each node on the cluster to communicate very quickly. To send and receive messages between two nodes on a shared memory cluster, one node will write data to the shared memory and the other node will read the data from the shared memory. Unfortunately, coherent memory clusters are very expensive to build and there is a limit to the size of the shared memory that can be stored on a coherent memory cluster.
Nodes on a compute cluster do not share physical memory. Communication between nodes on a compute cluster may be performed through messages usually delivered over an I/O subsystem. An I/O subsystem may include an I/O link, a synchronization mechanism, and a server thread on the receiving node to process incoming messages. Furthermore, compute nodes may need to reassemble incoming messages and store the reassembled messages in a node's main memory. Such an IO subsystem incurs a performance penalty which increases the message latency and limits the message throughput.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.